const crypto = require('crypto');
const Electron = require('ee-core/electron');

module.exports = {
    // 公共函数示例
    formatDate(date) {
        return new Date(date).toLocaleString();
    },

    /**
     * 获取当前11位时间戳（秒级时间戳）
     * @returns {number} 当前11位时间戳（秒）
     */
    timestamp() {
        return Math.floor(Date.now() / 1000);
    },

    md5(str) {
        return crypto.createHash('md5').update(str).digest('hex');
    },
    
    generateRandomId() {
        return Math.random().toString(36).substr(2, 9);
    },

    /**
     * 将十进制数字转换为十六进制字符串
     * @param {number} decimalNumber - 要转换的十进制数字
     * @returns {string} 转换后的十六进制字符串
     */
    toHexString(decimalNumber) {
        return `0x${decimalNumber.toString(16)}`;
    },

    /**
     * 将十六进制字符串转换为十进制数字
     * @param {string} hexString - 要转换的十六进制字符串
     * @returns {number} 转换后的十进制数字
     */
    toDecimalString(hexString) {
        return parseInt(hexString, 16);   
    },

    /**
     * 将两组16位数字解析为一个DWORD值
     * @param {number} highWord - 高16位的值
     * @param {number} lowWord - 低16位的值
     * @returns {number} 解析后的DWORD值
     */
    parseDwordFromWords(highWord, lowWord) {
        if (highWord < 0 || highWord > 65535 || lowWord < 0 || lowWord > 65535) {
            // throw new Error('值超出16位范围');
            return -1;
        }
        return (highWord << 16) | lowWord;
    },

    /**
     * 将一个DWORD值拆分为两组16位数字
     * @param {number} dwordValue - 要拆分的DWORD值
     * @returns {object} 包含highWord和lowWord的对象
     */
    splitDwordToWords(dwordValue) {
        if (dwordValue < 0 || dwordValue > 4294967295) {
            throw new Error('值超出DWORD范围');
        }
        const highWord = (dwordValue >> 16) & 0xFFFF;
        const lowWord = dwordValue & 0xFFFF;
        return [highWord, lowWord];
    },

    
    uint8ArrayToHex(uint8Array) {
        let hexString = '';
        for (let byte of uint8Array) {
            hexString += byte.toString(16).padStart(2, '0');
        }
        return hexString.toUpperCase();
    },
    
    prefixedHex(num) {
        let hex = num.toString(16).padStart(2, '0');
        return '0x' + hex.toUpperCase();
    },

    success(data) {
        return {
            status: true,
            msg: 'success',
            data: data || null
        }
    },

    error(msg) {
        return {
            status: false,
            msg: 'error:'+ msg
        }
    },
    
    // 延迟执行
    delay: function(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    },

    // 比列转换成百分比数值
    toPercent: (a, b) => {
        return (a / b * 100).toFixed(2);
    },

    sendMsg (data, channel) {
        const win = Electron.mainWindow.webContents;
        win.send('ipcMain', { data: data, channel: channel });
    }
};